package com.alibaba.ai;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class StdioClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(StdioClientApplication.class, args);
    }

    // 直接硬编码中文问题，避免配置文件编码问题
    private String userInput = "北京的天气如何？";

    //    定义了一个 CommandLineRunner 类型的Bean，它会在Spring Boot应用启动完成后自动执行
    //    注入了以下依赖：
    //    ChatClient.Builder: 用于构建聊天客户端
    //    ToolCallbackProvider: 提供工具回调功能
    //    ConfigurableApplicationContext: 应用上下文，用于关闭应用
    @Bean
    public CommandLineRunner predefinedQuestions(ChatClient.Builder chatClientBuilder, ToolCallbackProvider tools,
            ConfigurableApplicationContext context) {

        return args -> {
            //构建一个聊天客户端(ChatClient)的实例
            var chatClient = chatClientBuilder
                    .defaultToolCallbacks(tools)
                    .build();

            System.out.println("\n>>> QUESTION: " + userInput);
            //通过 chatClient.prompt(userInput).call().content() 向大模型发送问题并获取回答
            System.out.println("\n>>> ASSISTANT: " + chatClient.prompt(userInput).call().content());

            context.close();
        };
/*        // 使用传统方式
        return new CommandLineRunner() {
            @Override
            public void run(String... args) throws Exception {
                // 显式声明变量类型替代var关键字
                ChatClient chatClient = chatClientBuilder
                        .defaultToolCallbacks(tools)
                        .build();

                System.out.println("\n>>> QUESTION: " + userInput);

                // 分步调用替代链式调用
                ChatClient.ChatClientPrompt prompt = chatClient.prompt(userInput);
                ChatClient.ChatClientCall call = prompt.call();
                String content = call.content();
                System.out.println("\n>>> ASSISTANT: " + content);

                context.close();
            }
        };*/
    }
}
